package com.happok.onlineclass.usermanagement.user.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.happok.onlineclass.usermanagement.user.dataobject.UserDO;
import com.happok.onlineclass.usermanagement.user.dto.*;

import java.util.List;

/**
 * 功能说明
 *
 * @author : chenac
 * @version : v1.0
 * @date : 2021/7/14 16:16
 * @updateUser : chenac
 * @updateTime : 2021/7/14 16:16
 * @updateRemark : 无
 * @since : Springboot 2.5.2
 */
public interface UserDaoService {
    /**
     * 根据用户名称查用户信息
     *
     * @param username 用户名称（用户账号）
     * @author: chenac
     * @date: 16:18
     * @execption:
     * @return: com.happok.onlineclass.usermanagement.authentication.dto.UserDetailsDO
     */
    UserDO getUserByUsername(String username);

    /**
     * 添加用户
     *
     * @param userDO 添加用户参数
     * @author: chenac
     * @date: 11:02
     * @execption:
     * @return: void
     */
    void addUser(UserDO userDO);

    /**
     * 更新用户
     *
     * @param userDO 添加用户参数
     * @author: chenac
     * @date: 11:02
     * @execption:
     * @return: void
     */
    void updateUserById(UserDO userDO);

    /**
     * 更新用户
     *
     * @param userId              用户id
     * @param manageUpdateUserDTO 更新用户参数
     * @author: chenac
     * @date: 11:02
     * @execption:
     * @return: void
     */
    void updateUserByUserId(Integer userId, String extendInfoId, ManageUpdateUserDTO manageUpdateUserDTO);

    /**
     * 禁启用用户
     *
     * @param userId        用户id
     * @param enableUserDTO 禁启用用户参数
     * @author: chenac
     * @date: 11:04
     * @execption:
     * @return: void
     */
    void enableUserByUserId(Integer userId, EnableUserDTO enableUserDTO);

    /**
     * 检测用户账号
     *
     * @param checkAccountDTO 检测用户账号参数
     * @author: chenac
     * @date: 10:59
     * @execption:
     * @return: void
     */
    void checkAccount(CheckAccountDTO checkAccountDTO);

    /**
     * 查询用户列表
     *
     * @param listUserParamDTO 查询用户列表筛选条件
     * @author: chenac
     * @date: 11:00
     * @execption:
     * @return: com.baomidou.mybatisplus.core.metadata.IPage<com.happok.onlineclass.usermanagement.user.dto.ListUserDTO>
     */
    IPage<UserDO> listUser(ListUserParamDTO listUserParamDTO);

    /**
     * 查询用户详情
     *
     * @param userId 用户id
     * @author: chenac
     * @date: 11:00
     * @execption:
     * @return: com.happok.onlineclass.usermanagement.user.dataobject.UserDO
     */
    UserDO getUserDetailById(Integer userId);

    /**
     * 用户是否存在
     *
     * @param userId 用户id
     * @author: chenac
     * @date: 11:06
     * @execption:
     * @return: void
     */
    void isUserExist(Integer userId);

    /**
     * 查询头像id
     *
     * @param userId
     * @author: chenac
     * @date: 14:19
     * @execption:
     * @return: java.lang.String
     */
    String getHeadPortraitId(Integer userId);

    /**
     * 判断用户是否启用
     *
     * @param userId 用户id
     * @author: chenac
     * @date:  10:41
     * @execption:
     * @return:
     */
    void isUserEnable(Integer userId);

    /**
     * 根据用户id查询用户列表
     *
     * @param userIds
     * @author: chenac
     * @date:  14:02
     * @execption:
     * @return: java.util.List<com.happok.onlineclass.usermanagement.user.dto.UserSimpleDTO>
     */
    List<UserSimpleDTO> listUser(List<Integer> userIds);

    /**
     * 根据用户id查询用户列表
     *
     * @param userIds
     * @author: chenac
     * @date:  14:02
     * @execption:
     * @return: java.util.List<com.happok.onlineclass.usermanagement.user.dto.UserSimpleDTO>
     */
    List<ListUserDTO> listUserBasicInfo(List<Integer> userIds);
}